“Configurable hardware” or “parameterized hardware” describes hardware systems that are customized automatically at design creation time by using specified values for a set of parameters or attributes. Such hardware may also support changes at run-time depending on parameter settings. Configurable hardware systems typically provide better performance than software running on a general-purpose computer system and greater flexibility than conventional application specific integrated circuits (ASICs) without increasing circuit size and cost.
In conventional hardware systems, it is necessary to verify a system's functionality by testing the system and its components. Typically, the complexity of verifying a system's functionality increases with the number of components that make up the system. Therefore, the conventional approach is to manually verify each unit individually and then to assemble the “known good units” into a system. If hardware is hierarchically arranged, verification must be performed for each level in the hierarchy. If each individual unit has been verified before assembling the system, verifying system functionality can focus on potential problems with interactions between components rather than on each component's capabilities.
Configurable hardware systems can be verified using this type of conventional hierarchical decomposition. However, because each instance of a configurable hardware system is different, each time a configuration parameter is modified, the system and its components must be manually verified. The cost of repeatedly manually verifying a system and its components often offsets the advantages of configurable hardware.